package com.modular.iot.bo;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONObject;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import ntd.util.modular.things.entity.DeviceDataItem;

import java.time.LocalDateTime;

/**
 * 设备因子数据
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class IotDataItem {

    /** 因子编码 */
    private String factorCode;
    /** 因子名称 */
    private String factorName;
    /** 因子值 - 平均值 */
    private String factorVal;
    /** 因子标记 */
    private String factorFlag;
    /** 因子值-实时 */
    private String factorValRtd;
    /** 因子值-最小 */
    private String factorValMin;
    /** 因子值-最大 */
    private String factorValMax;
    /** 因子值-累计 */
    private String factorValCou;
    /** 因子值-实时-折算 */
    private String factorValZsRtd;
    /** 因子值-最小-折算 */
    private String factorValZsMin;
    /** 因子值-最大-折算 */
    private String factorValZsMax;
    /** 因子值-平均-折算 */
    private String factorValZsAvg;
    /** 因子标记-扩展 */
    private String factorEflag;
    /** 因子单位 */
    private String factoryUnit;
    /** 因子单位 - 累计值 */
    private String factoryCouUnit;
    /** 数据时间 */
    private LocalDateTime dataTime;

    /** 富铭 - 因子故障编码 */
    private String factoryErr;

    public IotDataItem(String factorCode, String factorName, String factorVal) {
        this.factorCode = factorCode;
        this.factorName = factorName;
        this.factorVal = factorVal;
    }

    public static IotDataItem transformProvincePlatformData(JSONObject data) {
        IotDataItem iotDataItem = new IotDataItem();
        iotDataItem.setFactorCode(data.getStr("FactorCode"));
        iotDataItem.setFactorName(data.getStr("FactorName"));
        iotDataItem.setFactorVal(data.getStr("AuditValue"));
        iotDataItem.setFactorFlag(data.getStr("DataFlag"));
        return iotDataItem;
    }

    public static IotDataItem transformComPlatform(DeviceDataItem deviceDataItem) {
        IotDataItem iotDataItem = new IotDataItem();
        BeanUtil.copyProperties(deviceDataItem, iotDataItem);
        return iotDataItem;
    }

    /**
     * 转化为数据库对象
     * @return
     */
    public DeviceDataItem toDeviceDataItemDo() {
        DeviceDataItem deviceDataItem = new DeviceDataItem();
        BeanUtil.copyProperties(this, deviceDataItem);
        return deviceDataItem;
    }
}
